package com.yupi.springbootinit.model.vo.qa;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
/**
 * @Author:WwW
 * @Description  质检任务详情 VO
 * @Date: 2025/10/30  10:39
 */
@Data
public class QualityInspectionDetailVO implements Serializable {

    private static final long serialVersionUID = 1L;

    // ========== 任务基本信息 ==========

    /**
     * 任务ID
     */
    private String taskId;

    /**
     * 任务标题
     */
    private String taskTitle;

    /**
     * 任务状态：PENDING-待处理, IN_PROGRESS-处理中, DONE-已完成
     */
    private String taskStatus;

    /**
     * 任务状态显示名称
     */
    private String taskStatusName;

    /**
     * 优先级：URGENT-紧急, NORMAL-普通, LOW-低
     */
    private String priority;

    /**
     * 优先级显示名称
     */
    private String priorityName;

    /**
     * 期望完成时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime expectedCompleteTime;

    /**
     * 任务创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    /**
     * 是否已认领
     */
    private Boolean isClaimed;

    /**
     * 认领人姓名
     */
    private String claimedByName;

    // ========== 工序信息 ==========

    /**
     * 工序详细信息
     */
    private StepInfo stepInfo;

    // ========== 订单信息 ==========

    /**
     * 订单详细信息
     */
    private OrderInfo orderInfo;

    // ========== 设备信息 ==========

    /**
     * 设备详细信息（可能为空）
     */
    private DeviceInfo deviceInfo;

    // ========== 历史质检记录 ==========

    /**
     * 历史质检记录列表（用于查看返工记录）
     */
    private List<InspectionHistoryItem> inspectionHistory;

    // ==================== 内部类 ====================

    /**
     * 工序信息
     */
    @Data
    public static class StepInfo implements Serializable {

        /**
         * 工序ID
         */
        private String stepId;

        /**
         * 工序序号
         */
        private Integer sequenceNo;

        /**
         * 工序名称
         */
        private String operationName;

        /**
         * 工序编码
         */
        private String operationCode;

        /**
         * 实际开始时间
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime actualStart;

        /**
         * 实际结束时间
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime actualEnd;

        /**
         * 预计工时（分钟）
         */
        private Integer expectedDurationMinutes;

        /**
         * 实际工时（分钟）
         */
        private Long actualDurationMinutes;

        /**
         * 操作员姓名
         */
        private String operatorName;

        /**
         * 工序状态
         */
        private String status;

        /**
         * 工序状态显示名称
         */
        private String statusName;

        // ========== 工序说明（来自工艺单）==========

        /**
         * 工艺要求
         */
        private String processRequirement;

        /**
         * 检验方法
         */
        private String inspectionMethod;

        /**
         * 检验标准
         */
        private String inspectionCriteria;

        /**
         * 是否需要检验
         */
        private Integer isInspectionRequired;
    }

    /**
     * 订单信息
     */
    @Data
    public static class OrderInfo implements Serializable {

        /**
         * 订单号
         */
        private String orderNumber;

        /**
         * 产品名称（单产品时展示，多产品时不展示）
         */
        private String productName;

        /**
         * 批次编码
         */
        private String batchCode;

        /**
         * 批次序号（如 1, 2, 3）
         */
        private Integer batchNo;

        /**
         * 批次总数量
         */
        private Integer quantity;

        /**
         * 交付日期
         */
        @JsonFormat(pattern = "yyyy-MM-dd")
        private LocalDate dueDate;

        /**
         * 订单类型：SALES-销售订单, RDO-研发订单
         */
        private String orderType;

        /**
         * 订单类型显示名称
         */
        private String orderTypeName;

        /**
         * 批次产品列表
         */
        private List<BatchProductInfo> products;
    }

    /**
     * 批次产品信息（内部类）
     */
    @Data
    public static class BatchProductInfo implements Serializable {

        /**
         * 产品料号
         */
        private String productCode;

        /**
         * 产品名称
         */
        private String productName;

        /**
         * 本批次生产数量
         */
        private Integer productionQuantity;

        /**
         * 产品高度（mm）
         */
        private BigDecimal productHeight;

        /**
         * 零件图号
         */
        private String partDrawingNo;

        /**
         * 单件重量（g）
         */
        private BigDecimal unitWeight;
    }

    /**
     * 设备信息
     */
    @Data
    public static class DeviceInfo implements Serializable {

        /**
         * 设备ID
         */
        private Long deviceId;

        /**
         * 设备名称
         */
        private String deviceName;

        /**
         * 设备编码
         */
        private String deviceCode;
    }

    /**
     * 历史质检记录项
     */
    @Data
    public static class InspectionHistoryItem implements Serializable {

        /**
         * 质检时间
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime inspectionTime;

        /**
         * 质检结果：PASS-通过, FAIL-不通过
         */
        private String inspectionResult;

        /**
         * 质检结果显示名称
         */
        private String inspectionResultName;

        /**
         * 质检员姓名
         */
        private String inspectorName;

        /**
         * 备注
         */
        private String remark;
    }
}